package lib.self.widget.list;

import androidx.recyclerview.widget.RecyclerView.OnScrollListener;
import android.view.View;

import java.util.List;

import lib.self.adapter.interfaces.IAdapter;
import lib.self.adapter.interfaces.OnAdapterClickListener;

/**
 * description: RecyclerView的所有用法
 * author: Steven Xiao
 * date: 2017/5/23
 */
public interface OnRecyclerWidgetListener<T> {
    int getRvResId();

    View getHeaderView();

    View getFooterView();

    View getNoMoreDataView();

    View getEmptyView();

    IAdapter<T> initAdapter();

    IAdapter<T> getAdapter();

    void showHeaderView();

    void hideHeaderView();

    void showFooterView();

    void hideFooterView();

    void showNoMoreDataView();

    void hideNoMoreDataView();

    void showEmptyView();

    void hideEmptyView();

    void setData(List<T> ts);

    void addItem(T item);

    void addItem(int position, T item);

    void addAll(List<T> data);

    void addAll(int position, List<T> item);

    void invalidate();

    void notifyItemChanged(int position);

    void remove(int position);

    void remove(T item);

    void removeAll();

    List<T> getData();

    int getCount();

    int getLastItemPosition();

    T getItem(int position);

    boolean isEmpty();

    void setOnAdapterClickListener(OnAdapterClickListener listener);

    void addOnScrollListener(OnScrollListener listener);

    int getItemRealPosition(int position);

    int getFirstVisiblePosition();

    View getChildAt(int index);

    /**
     * 排除header和footer的点击区域, 只返回有效的position
     *
     * @param v
     * @param position
     */
    void onItemClick(View v, int position);

    /**
     * 排除header和footer的点击区域, 只返回有效的position
     *
     * @param v
     * @param position
     */
    void onItemLongClick(View v, int position);

    /**
     * 点击整个header区域
     *
     * @param v
     */
    void onHeaderClick(View v);

    /**
     * 点击整个footer区域, 如果footer里的布局没有设置onClick监听的话可以接受到
     *
     * @param v
     */
    void onFooterClick(View v);

    boolean enableLongClick();

    /**
     * 设置当前显示的item(直接跳到)
     *
     * @param position
     */
    void setSelection(int position);

    /**
     * 设置当前显示的item(平滑滚动)
     *
     * @param position
     */
    void smoothScrollToPosition(int position);

    /**
     * 监听adapter数据变化
     */
    void onDataSetChanged();

    int getHeaderViewPosition();

}
